Verification of compiled code
نویسنده
چکیده
Compilers can introduce serious errors into programs whose source code appears to be correct. Modern compilers are reliable tools but we must resign ourselves to the fact that mistakes will be made by the compiler and we must therefore minimise the risk that those errors go unchecked. Previous attempts at showing the correctness of compilation have either sought to verify the compiler itself or to check the correctness of the compilation through the comparison of intermediate languages. This thesis adopts a novel approach to verifying the correctness of compiler generated code which, while less formal than a compiler correctness proof, does not require any potentially erroneous translations to intermediate languages. The approach taken uses inductive assertions placed in the source code program as the basis for both source and object code verification. The assertions are propagated into the object code program using a technique which integrates abstract control flow analysis with directed graph pattern matching. The propagation technique allows us to produce simple axiomatic specifications of the object language and re-use source code inference rules to verify the object code program. The thesis concludes that the cost of finding compiler errors is disproportionate to the likelihood of errors being introduced and not detected by more traditional software development processes. However, the increasingly stringent standards of certifying authorities and customers demand that compiler correctness is demonstrated. The techniques presented in this thesis show a cost effective way of meeting these demands.
منابع مشابه
Certificate Translation
Program verification techniques based on programming logics and verification condition generators provide a powerful means to reason about programs. Whereas these techniques have very often been employed in the context of high-level languages in order to benefit from their structural nature, it is often required, especially in the context of mobile code, to prove the correctness of compiled pro...
متن کاملPreservation of proof obligations for hybrid verification methods
Program verification environments increasingly rely on hybrid methods that combine static analyses and verification condition generation. While such verification environments operate on source programs, it is often preferable to achieve guarantees about executable code. We show that, for a hybrid verification method based on numerical static analysis and verification condition generation, compi...
متن کاملCompositional Compiler Verification for a Multi-Language World
Verified compilers are typically proved correct under severe restrictions on what the compiler’s output may be linked with, from no linking at all to linking only with code compiled from the same source language. Such assumptions contradict the reality of how we use these compilers since most software systems today are comprised of components written in different languages compiled by different...
متن کاملA Comprehensive Context for Mobile-Code Deployment Final Project Report for UC Irvine
Given the acknowledged importance of mobile code, current mobilecode distribution models are surprisingly primitive. For example, Java’s model assumes that the constituent parts that make up a mobile program will all be downloaded to a single location, and then verified, linked, possibly dynamically compiled, and finally executed at that very location. This research project has made three impor...
متن کاملA JavaTM 1 Implementation of a BDD Package
Efficient manipulation of Boolean functions is the foundation of many formal verification tasks. Several code libraries and development environments exist in the public domain which perform these tasks using ordered binary decision diagrams as the central data structure. This paper describes a re-implementation of one of these libraries, David Long’s bddlib, in Sun Microsystems’ Java computer l...
متن کاملTowards a Twofold Approach to the Verification of Generated VHDL Systems
The rise of Model Driven Development, Domain Specific Languages and Generative Programming as new techniques for systems and software engineering means that the actual code that is compiled and executed is no longer written by a human, it is generated by a tool. To give confidence that the desired system has been generated, it is necessary to provide a successful means to verify the generated c...
متن کامل